using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._3DAnalystTools._TINDataset
{
    /// <summary>
    /// <para>Edit TIN</para>
    /// <para>Loads data from one or more input features  to modify the surface of an existing triangulated irregular network (TIN).</para>
    /// <para>从一个或多个输入要素加载数据以修改现有三角不规则网络 （TIN） 的表面。</para>
    /// </summary>    
    [DisplayName("Edit TIN")]
    public class EditTin : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public EditTin()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_tin">
        /// <para>Input TIN</para>
        /// <para>The TIN dataset to process.</para>
        /// <para>要处理的 TIN 数据集。</para>
        /// </param>
        /// <param name="_in_features">
        /// <para>Input Feature Class</para>
        /// <para><xdoc>
        ///   <para>The input features and their related properties that will contribute to the definition of the TIN.</para>
        ///   <bulletList>
        ///     <bullet_item>Input Features—The feature with the geometry that will be imported to the TIN.</bullet_item><para/>
        ///     <bullet_item>Height Field— The source of elevation for the input features. Any numeric field from the input feature's attribute table can be used, along with the Z or M values stored in the Shape field. Choosing the <None> keyword will result in the feature's elevation being interpolated from the surrounding surface.</bullet_item><para/>
        ///     <bullet_item>Tag Field—A numeric attribute will be assigned to the TIN's data elements using values obtained from an integer field in the input feature's attribute table.</bullet_item><para/>
        ///     <bullet_item>Type—The feature's role in shaping the TIN surface will be defined. See the tool's usage tips for more information about surface feature types.</bullet_item><para/>
        ///     <bullet_item>Use Z— Indicates whether Z or M values are used when the SHAPE field is indicated as the height source. Setting this option to True implies Z values will be used, whereas setting it to False results in M values being used.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>有助于定义 TIN 的输入特征及其相关属性。</para>
        ///   <bulletList>
        ///     <bullet_item>输入要素 （Input Features） - 具有将输入到 TIN 的几何的特征。</bullet_item><para/>
        /// <bullet_item>高度字段- 输入要素的高程源。可以使用输入要素属性表中的任何数值字段，以及存储在形状字段中的 Z 或 M 值。选择<None>关键字将导致要素的高程从周围表面插值。</bullet_item><para/>
        ///     <bullet_item>标签字段 - 将使用从输入要素属性表中的整数字段获取的值，将数值属性分配给 TIN 的数据元素。</bullet_item><para/>
        ///     <bullet_item>类型 - 将定义特征在塑造 TIN 曲面中的作用。有关表面要素类型的详细信息，请参阅该工具的使用提示。</bullet_item><para/>
        ///     <bullet_item>使用 Z- 指示当 SHAPE 字段被指示为高度源时，是使用 Z 值还是 M 值。将此选项设置为 True 表示将使用 Z 值，而将其设置为 False 将导致使用 M 值。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        public EditTin(object _in_tin, object _in_features)
        {
            this._in_tin = _in_tin;
            this._in_features = _in_features;
        }
        public override string ToolboxName => "3D Analyst Tools";

        public override string ToolName => "Edit TIN";

        public override string CallName => "3d.EditTin";

        public override List<string> AcceptEnvironments => ["extent", "workspace"];

        public override object[] ParameterInfo => [_in_tin, _in_features, _constrained_delaunay.GetGPValue(), _derived_out_tin];

        /// <summary>
        /// <para>Input TIN</para>
        /// <para>The TIN dataset to process.</para>
        /// <para>要处理的 TIN 数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input TIN")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_tin { get; set; }


        /// <summary>
        /// <para>Input Feature Class</para>
        /// <para><xdoc>
        ///   <para>The input features and their related properties that will contribute to the definition of the TIN.</para>
        ///   <bulletList>
        ///     <bullet_item>Input Features—The feature with the geometry that will be imported to the TIN.</bullet_item><para/>
        ///     <bullet_item>Height Field— The source of elevation for the input features. Any numeric field from the input feature's attribute table can be used, along with the Z or M values stored in the Shape field. Choosing the <None> keyword will result in the feature's elevation being interpolated from the surrounding surface.</bullet_item><para/>
        ///     <bullet_item>Tag Field—A numeric attribute will be assigned to the TIN's data elements using values obtained from an integer field in the input feature's attribute table.</bullet_item><para/>
        ///     <bullet_item>Type—The feature's role in shaping the TIN surface will be defined. See the tool's usage tips for more information about surface feature types.</bullet_item><para/>
        ///     <bullet_item>Use Z— Indicates whether Z or M values are used when the SHAPE field is indicated as the height source. Setting this option to True implies Z values will be used, whereas setting it to False results in M values being used.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>有助于定义 TIN 的输入特征及其相关属性。</para>
        ///   <bulletList>
        ///     <bullet_item>输入要素 （Input Features） - 具有将输入到 TIN 的几何的特征。</bullet_item><para/>
        /// <bullet_item>高度字段- 输入要素的高程源。可以使用输入要素属性表中的任何数值字段，以及存储在形状字段中的 Z 或 M 值。选择<None>关键字将导致要素的高程从周围表面插值。</bullet_item><para/>
        ///     <bullet_item>标签字段 - 将使用从输入要素属性表中的整数字段获取的值，将数值属性分配给 TIN 的数据元素。</bullet_item><para/>
        ///     <bullet_item>类型 - 将定义特征在塑造 TIN 曲面中的作用。有关表面要素类型的详细信息，请参阅该工具的使用提示。</bullet_item><para/>
        ///     <bullet_item>使用 Z- 指示当 SHAPE 字段被指示为高度源时，是使用 Z 值还是 M 值。将此选项设置为 True 表示将使用 Z 值，而将其设置为 False 将导致使用 M 值。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_features { get; set; }


        /// <summary>
        /// <para>Constrained Delaunay</para>
        /// <para><xdoc>
        ///   <para>Specifies the triangulation technique that will be used along the breaklines of the TIN.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—The TIN will use Delaunay conforming triangulation, which may densify each segment of the breaklines to produce multiple triangle edges. This is the default.</bullet_item><para/>
        ///     <bullet_item>Checked—The TIN will use constrained Delaunay triangulation, which will add each segment as a single edge. Delaunay triangulation rules are honored everywhere except along breaklines, which will not be densified.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将沿 TIN 的断线使用的三角测量技术。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中 - TIN 将使用符合 Delaunay 的三角测量，这可能会使断线的每个段致密化以生成多个三角形边。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>选中 - TIN 将使用约束 Delaunay 三角剖分，这会将每个线段添加为一条边。除沿断线外，所有地方都遵守 Delaunay 三角测量规则，这些断线不会被致密化。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Constrained Delaunay")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _constrained_delaunay_value _constrained_delaunay { get; set; } = _constrained_delaunay_value._false;

        public enum _constrained_delaunay_value
        {
            /// <summary>
            /// <para>CONSTRAINED_DELAUNAY</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("CONSTRAINED_DELAUNAY")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>DELAUNAY</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DELAUNAY")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Updated TIN</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated TIN")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _derived_out_tin { get; set; }


        public EditTin SetEnv(object extent = null, object workspace = null)
        {
            base.SetEnv(extent: extent, workspace: workspace);
            return this;
        }

    }

}